import os


#以上代码应该是再复制一个该项目，在专门的这个复制的项目文件中，进行celery设置，再添加以上代码．
#老师做示范是mac本上进行项目，乌班图中进行celery服务器

from celery import Celery
from django.core.mail import send_mail
from django.conf import settings
from goods.models import GoodsCategory,Goods,GoodsSKU,IndexGoodsBanner,IndexCategoryGoodsBanner,IndexPromotionBanner
from django.template import loader


#创建celery客户端对象（就是celery对象）
#参数１：是指定异步任务的位置;参数２:指定异步任务存放的队列（redis存放）
app = Celery('celery_tasks.tasks',broker='redis://192.168.19.135:6379/4')

#定义任务　　任务队列broker
#进行一个封装
#装饰器是函数，再把括号去掉
@app.task
def send_active_email(to_email,user_name,token):
    """celery客户端对象生产的异步任务"""
    subject = "天天生鲜用户激活"  # 标题
    body = ""  # 文本邮件体
    sender = settings.EMAIL_FROM  # 发件人
    receiver = [to_email]  # 接收人
    html_body = '<h1>尊敬的用户 %s, 感谢您注册天天生鲜！</h1>' \
                '<br/><p>请点击此链接激活您的帐号<a href="http://127.0.0.1:8000/users/active/%s">' \
                'http://192.168.19.135:80/users/active/%s</a></p>' % (user_name, token, token)
    send_mail(subject, body, sender, receiver, html_message=html_body)


@app.task
def generate_static_index_html():
    """异步生成主页的静态页面"""

    # 查询商品分类信息
    categorys = GoodsCategory.objects.all()

    # 查询图片轮播信息
    goods_banners = IndexGoodsBanner.objects.all().order_by('index')

    # 查询商品活动信息
    promotion_banners = IndexPromotionBanner.objects.all().order_by('index')

    # 查询商品分类列表展示信息
    for category in categorys:
        # 遍历六种商品分类
        image_banners = IndexCategoryGoodsBanner.objects.filter(category=category, display_type=1)
        category.image_banners = image_banners

        title_banners = IndexCategoryGoodsBanner.objects.filter(category=category, display_type=0)
        category.title_banners = title_banners
    # 查询购物车信息
    cart_num = 0

    # 构造上下文
    context = {
        'categorys': categorys,
        'goods_banners': goods_banners,
        'promotion_banners': promotion_banners,
        'cart_num': cart_num
    }

    #得到模板　得到原始模板
    template = loader.get_template('static_index.html')

    # 使用上下文渲染页面，得到模板数据 :(不需要响应给用户，也不需要用户信息)　
    html_data = template.render(context)

    #放在静态服务器存储/放在celery服务器存储
    # 分析：这个异步任务是被celery服务器阅读的．　html_data需要存在celery服务器中管理静态文件的路径下
    file_path = os.path.join(settings.STATICFILES_DIRS[0],'index.html')
    with open(file_path,'w') as file:
        file.write(html_data)



